package cn.com.guage.spark.streaming.wordcount

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object SparkStreaming01_WordCount2 {

  def main(args: Array[String]): Unit = {

    //alt+上箭头 向上拉取
    //todo:1.创建sparkConf对象,设置appName和master的地址，local[2]表示本地运行2个线程
    val sparkConf: SparkConf = new SparkConf().setAppName("wordCount").setMaster("local[2]")
    //todo:2、创建sparkcontext上下文对象
    val sc: SparkContext = new SparkContext(sparkConf)
    //todo:3、读取数据文件
    val fileRDD: RDD[String] = sc.textFile("D:\\test\\wordcount.txt")
    //todo:4、切分文件中的每一行,返回文件所有单词
    val wordsRDD: RDD[String] = fileRDD.flatMap(_.split(" "))
    //todo:5、每个单词记为1，(单词，1)
    val wordAndOneRDD: RDD[(String, Int)] = wordsRDD.map(word => (word, 1));

    // val wordAndOneRDD: RDD[(String, Int)] = wordsRDD.(map(_, 1))
    //todo:6、相同单词出现的次数累加
    val result: RDD[(String, Int)] = wordAndOneRDD.reduceByKey(_ + _)
    //todo:按照单词出现的次数降序排列
    val sortResult: RDD[(String, Int)] = result.sortBy(_._2, false)
    //todo:7、收集结果数据
    val finalResult: Array[(String, Int)] = sortResult.collect()
    //todo:8、打印结果数据
    finalResult.foreach(x => println(x))
    //todo:9、关闭sc
    sc.stop()
  }
}
